package com.sendinfo.xspring.util;

import org.apache.commons.mail.HtmlEmail;
import org.apache.log4j.Logger;
/**
 * 邮件发送工具类
 */
public class MailUtil {
	
	private static final Logger log = Logger.getLogger(MailUtil.class);
	
	public static final Integer DEFAULT_SEND_MAIL_TEXT = 1;
	/**
	 * 不许实例化
	 */
	private MailUtil(){}
	
	public static boolean sendEmail(String smtpHostName,String userName, String password,String emailFrom,String emailTo,
			int smtpPort,String charset,String content,String title,Integer type){
		if(type == DEFAULT_SEND_MAIL_TEXT){
			return sendEmailByText(smtpHostName,userName,password,emailFrom,emailTo,smtpPort,charset,content,title);
		}
		else{
			return sendEmailByHtml(smtpHostName, userName, password, emailFrom, emailTo, smtpPort, charset, content, title);
		}
	}
	
	/**
	 * 邮件发送类 --- 发送文本内容
	 * @param smtpHostName 默认smtpHostName，此参数通过配置文件设置
	 * @param userName 默认邮件服务器用户名，此参数通过配置文件设置
	 * @param password	默认邮件服务器密码，此参数通过配置文件设置
	 * @param emailFrom	默认发件人邮箱地址，此参数通过配置文件设置
	 * @param smtpPort  默认邮件服务器端口号，此参数通过配置文件设置
	 * @param charset  	默认邮件字符集，此参数通过配置文件设置
	 * <pre>
	 * 	 emailTo,content,title 为动态设置参数，根据实际业务需求传递。
	 * 	 默认web项目中提供，MailCommad类，通过spring-util.xml动态载入。
	 *   其中此3个参数需要重新setter()
	 * </pre>
	 * @param emailTo	<code>emailTo</code>  收件人邮箱地址，动态设置
	 * @param content	<code>content</code>  邮件文本内容，动态设置
	 * @param title   	<code>title</code>    邮件标题，动态设置
	 * @return
	 */
	private static boolean sendEmailByText(String smtpHostName,String userName, String password,String emailFrom,String emailTo,
			int smtpPort,String charset,String content,String title) {
		
		try {
			HtmlEmail email = new HtmlEmail();
			email.setDebug(false);
			email.setHostName(smtpHostName);
			email.setSSL(true);
			email.setSmtpPort(smtpPort);
			email.addTo(emailTo);
			email.setFrom(emailFrom);
			email.setAuthentication(userName, password);
			email.setCharset(charset);
			email.setSubject(title);
			email.setHtmlMsg(content);
			email.send();
			return true;
		} catch (Exception e) {
			log.error("邮件发送失败..." + e.getMessage());
			return false;
		}
	}
	/**
	 * 邮件发送类 --- 发送Html内容
	 * @param smtpHostName 默认smtpHostName，此参数通过配置文件设置
	 * @param userName 默认邮件服务器用户名，此参数通过配置文件设置
	 * @param password	默认邮件服务器密码，此参数通过配置文件设置
	 * @param emailFrom	默认发件人邮箱地址，此参数通过配置文件设置
	 * @param smtpPort  默认邮件服务器端口号，此参数通过配置文件设置
	 * @param charset  	默认邮件字符集，此参数通过配置文件设置
	 * <pre>
	 * 	 emailTo,content,title 为动态设置参数，根据实际业务需求传递。
	 * 	 默认web项目中提供，MailCommad类，通过spring-util.xml动态载入。
	 *   其中此3个参数需要重新setter()
	 * </pre>
	 * @param emailTo	<code>emailTo</code>  收件人邮箱地址，动态设置
	 * @param content	<code>content</code>  邮件Html内容，动态设置
	 * @param title   	<code>title</code>    邮件标题，动态设置
	 * @return
	 */
	private static boolean sendEmailByHtml(String smtpHostName,String userName, String password,String emailFrom,String emailTo,
			int smtpPort,String charset,String content,String title) {
		
		try {
			HtmlEmail email = new HtmlEmail();
			email.setDebug(false);
			email.setHostName(smtpHostName);
			email.setSSL(true);
			email.setSmtpPort(smtpPort);
			email.addTo(emailTo);
			email.setFrom(emailFrom);
			email.setAuthentication(userName, password);
			email.setCharset(charset);
			email.setSubject(title);
			email.setHtmlMsg(content);
			email.send();
			return true;
		} catch (Exception e) {
			log.error("邮件发送失败..." + e.getMessage());
			return false;
		}
	}
	
}
